package com.xgpro.mobile.studycentre.service;

import com.xgpro.domain.rolemanage.entity.Department;
import com.xgpro.domain.studycentre.entity.Course;
import com.xgpro.domain.studycentre.vo.*;
import com.xgpro.domain.talentintroduction.entity.User;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * @author tx
 * @version 1.0
 * @date 2019/8/25 12:06
 */
public interface CourseService {

    /**
     * 课程轮播图
     * @return
     */
    public List<Course> qryCourseListForCarousel();

    /**
     * 添加课程信息
     * @param courseFront
     * @param userId
     * @return
     */
    public Integer addCourse(CourseFront courseFront,Integer userId,Integer deptId) throws Exception;


    /**
     * 根据审批状态进行区分
     * @param courseStatus
     * @return
     */
    public List<CourseBack> qryCourseByStatusForApproval(CourseStatus courseStatus,Integer deptId,List<Integer> roleIds);


    /**
     * 通过课程id获取课程详细信息
     * @param id
     * @return
     */
    public CourseInfo qryCourseInfoById(Integer id);

    /**
     * 课程通过
     * @param id
     * @return
     */
    public Integer passCourse(Integer id,List<Integer> roleIds) throws Exception;

    /**
     * 课程驳回
     * @param id
     * @param roleIds
     * @return
     */
    public Integer refCourse(Integer id,List<Integer> roleIds) throws Exception;


    /**
     * 我的课程待讲
     * @param id
     * @return
     */
    public List<CourseBack> openMyCourseList(Integer id,Integer isOpen);


    /**
     * 发布通知
     * @param courseMessage
     */
    public void openMyCourse(CourseMessage courseMessage) throws Exception;
    /**
     * 我的课程审批中
     * @param id
     * @return
     */
    public List<CourseBack> appMyCourseList(Integer id);


    /**
     * 提醒审批
     * @param id
     */
    public void remindApproval(Integer id) throws Exception;

    /**
     * 我的课程已讲
     * @param id
     * @return
     */
    public List<CourseBack> achieveMyCourseList(Integer id);

    /**
     * 课程报名
     * @param courseSignFront
     * @return
     */
    public List<CourseSignBack> qrySignCourse(CourseSignFront courseSignFront,Integer userId);


    /**
     * 报名
     * @param userId
     * @param courseId
     * @return
     */
    public Integer signOneCourse(Integer userId,Integer courseId);


    /**
     * 参加的课程
     * @param mySignCourseFront
     * @param userId
     * @return
     */
    public List<MySignCourseBack> qryMySignCourse(MySignCourseFront mySignCourseFront,Integer userId);


    /**
     * 课程中心列表显示
     * @param courseCentreFront
     * @return
     */
    public CourseCentreBackResult qryCourseCentre(CourseCentreFront courseCentreFront);
    /**
     * 查询教师详细信息
     * @param id
     * @return
     */
    public TeacherBack qryTeacherByUserId(Integer id);


    /**
     * 查询自己的开设课程
     * @param userId
     * @param myCourse
     * @return
     */
  //  public List<Course> qryMyCourse(Integer userId,MyCourse myCourse);


    /**
     * 结课
     * @param overCourseFront
     * @return
     */
    public Integer overStudy(OverCourseFront overCourseFront) throws Exception;

    /**
     * 查询部门信息
     * @param id
     * @return
     */
    List<Department> qryDeptMessage(String id );

    /**
     * 查询部门及部门所属党员信息
     * @param id
     * @return
     */
    List<User> qryDeptUserList(String id );


    /**
     * 课程评估
     * @param map
     * @return
     */
    public Integer courseEva(Map map,Integer userId);

    /**
     * 课程播放
     * @return
     */
    public SmallCourseInfo qrySmallCourseInfo(Integer id,Integer userId);

    /**
     * 查询外部导师信息
     * @param name
     * @return
     */
    List<User> qryOutUserList(String name);

    /**
     * 扫码
     * @param courseId
     * @param userId
     * @return
     */
    String doQR(Integer courseId,Integer userId);

    /**
     * 首页精品课程
     * @return
     */
    GoodCourseResult getGoodCourses();
    /**
     * 查询部门及部门所属党员信息(搜索)
     * @param id
     * @param userName
     * @return
     */
    List<Department> qryCourseDeptMessage(String id, String userName);

    /**
     * 查询部门及部门所属人员信息(搜索)
     * @param id
     * @param userName
     * @return
     */
    List<User> qryCourseDeptUserList(String id, String userName);

    /**
     * 查询部门相关信息模糊查询
     * @param name
     * @return
     */
    List<Department> qryLikeDeptMessage(String name);
}
